package com.zhoug.common3.filters;

import android.text.InputFilter;
import android.text.Spanned;

import com.zhoug.common3.utils.LogUtils;

/**
 * 限制整数和小数位数
 *
 * @Author: zhoug
 * @Date: 2023/1/4
 * @Description:
 * @deprecated 功能没有实现完成
 * @see DecimalDigitsInputFilter
 */
@Deprecated
public class DecimalDigitsInputFilter1 implements InputFilter {
    private static final String TAG = ">>>DecimalDigitsInputFilter";
    private static boolean DEBUG = true;
    private static final String REG = "^[0-9|.]*$";
    /**
     * 限制整数和小数位数,负数表示不限制
     */
    private int integerDigits = -1;//整数位数
    private int decimalDigits = 2;//小数位数


    public DecimalDigitsInputFilter1() {
    }

    /**
     * @param integerDigits 整数位数 负数表示不限制
     * @param decimalDigits 小数位数 负数表示不限制
     */
    public DecimalDigitsInputFilter1(int integerDigits, int decimalDigits) {
        this.integerDigits = integerDigits;
        this.decimalDigits = decimalDigits;
    }

    /**
     * @param decimalDigits 小数位数 负数表示不限制
     */
    public DecimalDigitsInputFilter1(int decimalDigits) {
        this.decimalDigits = decimalDigits;
    }

    /**
     * @param integerDigits 整数位数 负数表示不限制
     */
    public void setIntegerDigits(int integerDigits) {
        this.integerDigits = integerDigits;
    }

    /**
     * @param decimalDigits 小数位数 负数表示不限制
     */
    public void setDecimalDigits(int decimalDigits) {
        this.decimalDigits = decimalDigits;
    }

    /**
     * 当缓冲区要使用source的[start - end)范围内的内容替换dest的[dstart - dend)范围内的内容
     *
     * @param source 输入的内容,若是删除动作，则为空字符
     * @param start  source对应的起始索引，始终为0
     * @param end    source对应的结尾索引，为source的length-1
     * @param dest   当前输入框中显示的内容
     * @param dstart 被贴换的内容在输入框中的起始位置(包含)
     * @param dend   被贴换的内容在输入框中的结束位置(不包含)
     * @return 返回null:表示接受原本的输入source;返回空字符串"":放弃本次输入;返回指定内容
     */
    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        if (DEBUG) {
            LogUtils.d(TAG, "source:" + source + ",start:" + start + ",end:" + end + ",dest:" + dest + ",dstart:" + dstart + ",dend:" + dend);
        }
        if (source == null || source.length() <= 0) {
            return "";
        }
        String sourceText = source.toString();
        //去掉空格
        sourceText = sourceText.replaceAll(" ", "");
        //只能包含数字
        if (sourceText.length() == 0 || !sourceText.matches(REG)) {
            if (DEBUG) {
                LogUtils.d(TAG, sourceText.length() == 0?"没有输入":"输入内容不是数字");
            }
            return "";
        }
        //需要限制
        if (integerDigits >= 0 || decimalDigits >= 0) {
            String destText = dest.toString();
            int maxInteger = integerDigits >= 0 ? integerDigits : Integer.MAX_VALUE;
            int maxDecimal = decimalDigits >= 0 ? decimalDigits : Integer.MAX_VALUE;
            if (destText.contains(".")) {
                int dotIndex = destText.indexOf(".");
                //输入框中已经有小数了并且没有选中小数,输入的内容不能再有小数
                //568.669
                if (sourceText.contains(".") && (!(dotIndex >= dstart && dotIndex < dend) || dstart == dend)) {
                    if (DEBUG) {
                        LogUtils.d(TAG, "已经有小数点了");
                    }
                    return "";
                }

                maxInteger = maxInteger - dotIndex;
                maxDecimal = maxDecimal - (destText.length() - dotIndex - 1);
            } else {
                maxInteger = maxInteger - destText.length();
            }
            if (DEBUG) {
                LogUtils.d(TAG, "maxInteger:" + maxInteger + ",maxDecimal=" + maxDecimal);
            }
            




        }


        return sourceText;
    }


}
